﻿using System;
using System.Linq;
using System.Collections.Generic;
using rsp.messages;
using rsp.textInWorteZerleger.contract;

namespace rsp.textInWorteZerleger {
    public class TextInWorteZerleger : ITextInWorteZerleger {

        public void ProcessPrüftext(Prüftext zuPrüfenderText) {
            var kleinbuchstabenPrüftext = InKleinbuchstaben(zuPrüfenderText);
            var worte = ZerlegeInWorte(kleinbuchstabenPrüftext);
            OnWorteVergleich(worte);
        }

        internal Worte ZerlegeInWorte(Prüftext textZumZerlegen) {
            string[] separator = {" ", ".", ";", ",", ":", "-", "_", "?", "!", "\"", "'", "(", ")", Environment.NewLine};
            IEnumerable<string> zerlegterText = textZumZerlegen.Value.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            var worte = zerlegterText.Select(wort => new Wort(wort)).ToArray();
            return new Worte(worte);
        }

        internal Prüftext InKleinbuchstaben(Prüftext text) {
            return new Prüftext(text.Value.ToLower());
        }

        public event Action<Worte> OnWorteVergleich;
    }
}

